package com.ftg.learn.controller;

import com.ftg.learn.domain.DeptDomain;
import com.ftg.learn.service.DeptService;
import com.ftg.learn.service.imple.DeptServiceImpl;
import com.ftg.learn.util.PageUtil;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;

/**
 * 数据  ： 数据接口
 * spring mvc 注解： 表示当前类为控制层类 ： 就是让前端在http协议下调用
 *  http://localhost:1234/app/dept/list
 * @author 布衣
 */
@Api(tags = "部门管理")
@RequestMapping("/dept")
@RestController
public class DeptController {

    @Resource
    DeptService deptService;

    /**
     * 这个方法是不是一个数据提供者
     *
     * @param dname 部门名称（前端的请求）Parameter 【参数】
     * @return json
     */
    @GetMapping("/list")
    @ApiOperation(value = "查询所有部门")
    public PageUtil<PageInfo<DeptDomain>> showAll(
            //@RequestParam 绑定前台传递参数值 给对应的变量 [springmvc]
            @ApiParam(name = "dname", value = "请输入您的部门名称") @RequestParam(value = "dname", required = false) String dname,
            @ApiParam(name = "pageNum", value = "页码") @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
            @ApiParam(name = "pageSize", value = "条目数") @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize
    ) {
        //返回信息是不是较多，可不可以自行处理
        return deptService.list(dname, pageNum, pageSize);
    }


    /**
     * 通过请求体进行传递参数【复合参数 ： java类】
     *
     * @param deptDomain 部门实休
     * @return 条数
     */
    @PostMapping("/save")
    @ApiOperation("添加部门")
    public PageUtil<Integer> save(@RequestBody DeptDomain deptDomain) {
        return deptService.save(deptDomain);
    }


    @PutMapping("/modify")
    public PageUtil<Integer> modify(
            @ApiParam(name = "deptno", value = "请输入原始部门编号") @RequestParam(value = "deptno", required = false) Integer deptno,
            @RequestBody DeptDomain deptDomain) {
        return deptService.modify(deptno, deptDomain);
    }

    // /delete/123
    @DeleteMapping("/deleteById/{id}")
    public PageUtil<Integer> deleteById(
            @ApiParam(name = "id", value = "请输入原始部门编号") @PathVariable("id") Integer id
    ) {
        return deptService.deleteById(id);
    }


}
